#include <stdio.h>
#include <stdlib.h>
#include "init.h"
#define PAS_DE_MINES 0
#define MINE 1


void jeu(champs c , int i, int j, int *cases_sans_mines){
	int etat = joueur(c,i,j) ;
	switch(etat){
		
		//=============== CAS OU IL N Y A PAS DE MINES =====================
		
	case PAS_DE_MINES : *cases_sans_mines=*cases_sans_mines - 1;
						c->tab[indice(c,i,j)].status = DEJAVU ;
						if(nb_mines_voisins(c,i,j)==0){ //si pas de mines au voisinage
							
						/* On devoile les voisins recursivement */	
							jeu(c,i-1,j,cases_sans_mines);
							jeu(c,i-1,j+1,cases_sans_mines); 
							jeu(c,i-1,j-1,cases_sans_mines);
							jeu(c,i+1,j+1,cases_sans_mines);
							jeu(c,i+1,j-1,cases_sans_mines);
							jeu(c,i+1,j,cases_sans_mines);
							jeu(c,i,j-1,cases_sans_mines);
							jeu(c,i,j+1,cases_sans_mines);			
						}
						break;
							
		//=============== CASE AVEC MINE =====================
			
	case MINE : c->nb_erreurs_restant -- ; //on diminue le nombre d erreurs
				c->tab[indice(c,i,j)].status = DEJAVU ;
	}
		
}

int testVictoire(int cases,int erreurs){
	if(cases==0 ) // s il ne reste plus de cases  
		return GAGNE ; // il gagne 
	if(erreurs<0) // si le joueur a epuise ses chances 
		return PERDU ;
	return 0; //sinon  le jeu continue 
}

int joueur(champs c, int i, int j){
	
	//============ VALISATION DE L ENTREE =================
 if((i>=c->nb_lignes )||( i<0) || (j <0) || (j>=c->nb_colonnes))
	 return -1 ;
	 //=========== TEST SUR LE CHAMP A DEVOILER ============
 switch(c->tab[indice(c,i,j)].status)	{
 	case PASVU : if(c->tab[indice(c,i,j)].mine== 0)
	 					return PAS_DE_MINES ; // pas de mines
 				 else
	 				return MINE; // une mine
 				
	case DEJAVU :	return 2 ;
 }
			

}



int secret_afficher(champs c, int *tab2){
	int i, j, k=0;	
	for(i=0; i<c->nb_lignes; i++){
		for(j=0; j<c->nb_colonnes; j++){
			if(c->tab[indice(c,i,j)].mine == 1 && c->tab[indice(c,i,j)].status == PASVU){
				c->tab[indice(c,i,j)].status = DEJAVU;
				tab2[k]=indice(c,i,j);
				k++;
			}
		}
	}
	return k;
}

void secret_cacher(champs c, int *tab2, int nb_mines){
	int i,j,k;
	for(k=0;k<nb_mines;k++){
		i=getX(c,tab2[k]);
		j=getY(c,tab2[k]);
		c->tab[indice(c,i,j)].status = PASVU;
	}
	
}


void cacher(champs c){
	int i, j, k=0;	
	for(i=0; i<c->nb_lignes; i++){
		for(j=0; j<c->nb_colonnes; j++){
				c->tab[indice(c,i,j)].status = PASVU;
			}
		}
}
	

int debut(int argc, char const* argv[]){
	if(argc>1)
	{
		if(strcmp(argv[1],"-f")==0)
			return 2 ;
		else
			return 1;
		
	}else
		return 0 ;
	
}




